package pe.com.upc.edu.rtt.comprarentradas.controller;

import java.io.IOException;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.bind.annotation.ActionMapping;

import pe.com.upc.edu.rtt.comprarentradas.bean.AsientoBean;
import pe.com.upc.edu.rtt.comprarentradas.bean.PartidoBean;
import pe.com.upc.edu.rtt.comprarentradas.service.CompararEntradasService;

import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.User;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;

@Controller
@RequestMapping("VIEW")
public class CompararEntradasController {

	private static final Log _log = LogFactoryUtil.getLog(CompararEntradasController.class);

	@Autowired
	private CompararEntradasService compararEntradasService;

	@RequestMapping
	protected String defaultView(Model model, RenderRequest renderRequest) throws SystemException {
		if (_log.isDebugEnabled())
			_log.debug("CompararEntradasController list");
		HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest));			
		String respuesta = ParamUtil.getString(renderRequest, "respuesta");
		if (Validator.isNotNull(respuesta)) {
			String mensaje = ParamUtil.getString(renderRequest, "mensaje");
			model.addAttribute("mensaje", mensaje);
			return respuesta;
		}				
		ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);		
		User user = themeDisplay.getUser();				
		int eventoPartido = Integer.parseInt( httpReq.getParameter("evento") );		
		PartidoBean partidoBean = compararEntradasService.obtenerFechaEventoPartido(eventoPartido);
		List<AsientoBean> listaAsientos = compararEntradasService.listarAsientosPorPartido(eventoPartido);		
		int cantidad = compararEntradasService.cantidadDeEntradasPorEvento(user.getUuid(),eventoPartido);
		model.addAttribute("cantidad", cantidad);
		model.addAttribute("partido", partidoBean);
		model.addAttribute("listaAsientos", listaAsientos);
		return "view";
	}

	@ActionMapping(value = "registrarCompra")
	public void registrarUsuariosWS(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
		String jsp = "respuesta";		
		ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);		
		User user = themeDisplay.getUser();		
		HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(actionRequest));			
		String[] listaAsientos = httpReq.getParameterValues("asiento");	
		String partido = httpReq.getParameter("partido");
		String tipoPago = httpReq.getParameter("tipoPago");
		String pag_num_tarjeta = httpReq.getParameter("numeroTarjeta");
		String entidadBancaria = httpReq.getParameter("entidadBancaria");
		String mensaje = "";
		try {			
			if(user!=null){	
				int cantidad = compararEntradasService.cantidadDeEntradasPorEvento(user.getUuid(),Integer.parseInt(partido));			
				cantidad += listaAsientos.length;
				if(cantidad<=10){//limite por regla de negocio
					int[] lst = new int[listaAsientos.length];			
					for (int i = 0; i < listaAsientos.length; i++) {
						lst[i] = Integer.parseInt( listaAsientos[i] ) ;
					}		
					_log.info("tipoPago :"+tipoPago);
					if(tipoPago.equals("1")  ){
						mensaje = compararEntradasService.reservarEntradasOnline(user.getUuid(),user.getEmailAddress(),partido,lst);				
					}
					if(tipoPago.equals("2") || tipoPago.equals("3") ){
						if(compararEntradasService.numeroTarjetaValido(pag_num_tarjeta,entidadBancaria)){
							mensaje = compararEntradasService.comprarEntradaService(user.getUuid(),user.getEmailAddress(),tipoPago,entidadBancaria,pag_num_tarjeta,partido,lst);				
						}
					}			
				}else{
					mensaje = "Exedio el limite de entradas por personas";
				}				
			}			
		} catch (Exception e) {
			mensaje = e.getLocalizedMessage();
			e.printStackTrace();
		}
		actionResponse.setRenderParameter("mensaje", mensaje);
		actionResponse.setRenderParameter("respuesta", jsp);
	}
}